//-----------------------------------【程序说明】----------------------------------------------
//  程序名称:：【OpenCV入门教程之三】图像的载入，显示与输出 一站式完全解析 博文配套源码
// VS2010版   OpenCV版本：2.4.8
//      2014年3月5日 Create by 浅墨
//  描述： 图像的载入，显示与输出 一站式剖析   配套源码
//  图片素材出处：dota2原画圣堂刺客 dota2 logo  动漫人物
//------------------------------------------------------------------------------------------------

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;

int main()
{
    //-----------------------------------【一、图像的载入和显示】--------------------------------------
    //     描述：以下三行代码用于完成图像的载入和显示
    //--------------------------------------------------------------------------------------------------

    Mat girl = imread("girl.png"); //载入图像到Mat
    namedWindow("【1】动漫图");    //创建一个名为 "【1】动漫图"的窗口
    imshow("【1】动漫图", girl);   //显示名为 "【1】动漫图"的窗口

    //-----------------------------------【二、初级图像混合】--------------------------------------
    //     描述：二、初级图像混合
    //-----------------------------------------------------------------------------------------------
    //载入图片
    Mat image = imread("dota.jpg", 1); // 默认1载入三通道 RGB  0 返回灰度图像  -1 alpha通道
    Mat logo = imread("dota_logo.jpg");

    //载入后先显示
    namedWindow("【2】原画图");
    imshow("【2】原画图", image);
    
    namedWindow("【3】logo图");
    imshow("【3】logo图", logo);
    //定义一个Mat类型，用于存放，图像的ROI   ROI(region of interest),感兴趣区域
    Mat imageROI;
    //方法一
    // 依然操作的是image，只不过仅仅修改ROI，大小也三ROI
    imageROI = image(Rect(0, 10, logo.cols, logo.rows)); // x y为坐标点 图片大小不能超出边界

    //方法二
    //imageROI=image(Range(350,350+logo.rows),Range(800,800+logo.cols));

    //将logo加到原图上
    addWeighted(imageROI, 0.2, logo, 0.8, 0., imageROI); // a 1-a  透明度为alpha(取值为0-1，0为完全透明，1为完全不透明)

    //显示结果
    namedWindow("【4】原画+logo图");
    imshow("【4】原画+logo图", image);

    //-----------------------------------【三、图像的输出】--------------------------------------
    //     描述：将一个Mat图像输出到图像文件
    //-----------------------------------------------------------------------------------------------
    //输出一张jpg图片到工程目录下
    imwrite("我喜欢打dota2 by浅墨.jpg", image);

    waitKey();

    return 0;
}
